<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>重力感应</title>
</head>
<!-- <body>
    <form action="" oninput="c.value=100 - parseInt(speed1.value)">
        <label for="speed1">当前阈值: </label><input disabled type="number" value="20" name="speed" id="speed1">
    
        
        【当前灵敏度：<output name="c" for="x">80</output>】
        <br>
        <span>请摇晃手机</span>
    </form> -->
    <h1>请摇晃手机</h1>
    <script>
             //运动事件监听
             interval1 =  setInterval(function(){

if (window.DeviceMotionEvent) {
    window.addEventListener('devicemotion',deviceMotionHandler,false);
}

//获取加速度信息
//通过监听上一步获取到的x, y, z 值在一定时间范围内的变化率，进行设备是否有进行晃动的判断。
//而为了防止正常移动的误判，需要给该变化率设置一个合适的临界值。
var SHAKE_THRESHOLD = 4000;
var last_update = 0;
var x, y, z, last_x = 0, last_y = 0, last_z = 0;
function deviceMotionHandler(eventData) {
        var acceleration =eventData.accelerationIncludingGravity;
        var curTime = new Date().getTime();
        if ((curTime-last_update)> 10) {
            var diffTime = curTime -last_update;
            last_update = curTime;
            x = acceleration.x;
            y = acceleration.y;
            z = acceleration.z;
            var speed = Math.abs(x +y + z - last_x - last_y - last_z) / diffTime * 10000;
            if (speed > SHAKE_THRESHOLD) {
                alert("你中奖啦！");  // Do something
                clearInterval(interval1)
            }
            last_x = x;
            last_y = y;
            last_z = z;
        }
}






             },200)
 
        
        
    </script>
</body>
</html>
